
// This is the command sequence that initialises the ILI9341 driver
//
// This setup information uses simple 8 bit SPI writecommand() and writedata()
// functions
//
// See ST7735_Setup.h file for an alternative format

{
    writecommand(0xEF);
    writedata(0x03);
    writedata(0x80);
    writedata(0x02);

    writecommand(0xCF);
    writedata(0x00);
    writedata(0XC1);
    writedata(0X30);

    writecommand(0xED);
    writedata(0x64);
    writedata(0x03);
    writedata(0X12);
    writedata(0X81);

    writecommand(0xE8);
    writedata(0x85);
    writedata(0x00);
    writedata(0x78);

    writecommand(0xCB);
    writedata(0x39);
    writedata(0x2C);
    writedata(0x00);
    writedata(0x34);
    writedata(0x02);

    writecommand(0xF7);
    writedata(0x20);

    writecommand(0xEA);
    writedata(0x00);
    writedata(0x00);

    writecommand(ILI9341_PWCTR1);  // Power control
    writedata(0x23);               // VRH[5:0]

    writecommand(ILI9341_PWCTR2);  // Power control
    writedata(0x10);               // SAP[2:0];BT[3:0]

    writecommand(ILI9341_VMCTR1);  // VCM control
    writedata(0x3e);
    writedata(0x28);

    writecommand(ILI9341_VMCTR2);  // VCM control2
    writedata(0x86);               //--

    writecommand(ILI9341_MADCTL);  // Memory Access Control
#ifdef M5STACK
    writedata(TFT_MAD_MY | TFT_MAD_MV |
              TFT_MAD_COLOR_ORDER);  // Rotation 0 (portrait mode)
#else
    writedata(TFT_MAD_MX | TFT_MAD_COLOR_ORDER);  // Rotation 0 (portrait mode)
#endif

    writecommand(ILI9341_PIXFMT);
    writedata(0x55);

    writecommand(ILI9341_FRMCTR1);
    writedata(0x00);
    writedata(0x13);  // 0x18 79Hz, 0x1B default 70Hz, 0x13 100Hz

    writecommand(ILI9341_DFUNCTR);  // Display Function Control
    writedata(0x08);
    writedata(0x82);
    writedata(0x27);

    writecommand(0xF2);  // 3Gamma Function Disable
    writedata(0x00);

    writecommand(ILI9341_GAMMASET);  // Gamma curve selected
    writedata(0x01);

    writecommand(ILI9341_GMCTRP1);  // Set Gamma
    writedata(0x0F);
    writedata(0x31);
    writedata(0x2B);
    writedata(0x0C);
    writedata(0x0E);
    writedata(0x08);
    writedata(0x4E);
    writedata(0xF1);
    writedata(0x37);
    writedata(0x07);
    writedata(0x10);
    writedata(0x03);
    writedata(0x0E);
    writedata(0x09);
    writedata(0x00);

    writecommand(ILI9341_GMCTRN1);  // Set Gamma
    writedata(0x00);
    writedata(0x0E);
    writedata(0x14);
    writedata(0x03);
    writedata(0x11);
    writedata(0x07);
    writedata(0x31);
    writedata(0xC1);
    writedata(0x48);
    writedata(0x08);
    writedata(0x0F);
    writedata(0x0C);
    writedata(0x31);
    writedata(0x36);
    writedata(0x0F);

    writecommand(ILI9341_SLPOUT);  // Exit Sleep

    spi_end();
    delay(120);
    spi_begin();

    writecommand(ILI9341_DISPON);  // Display on
}